package ay.shadow.admin.controller;

import ay.shadow.admin.entity.TestDemoWxEntity;
import ay.shadow.admin.service.ITestDemoWxService;
import ay.shadow.core.utils.Decript;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * <p>
 *  微信校验
 * </p>
 *
 * @author 暗影
 * @since 2024-12-20
 */
@RestController
@RequestMapping("/shadowWx")
@RequiredArgsConstructor
public class TestDemoWxController {
    private final ITestDemoWxService testDemoWxService;

    @RequestMapping("/cheekOauth")
    public String getVo(String signature,String timestamp,String nonce,String echostr){
        BaseMapper<TestDemoWxEntity> baseMapper = testDemoWxService.getBaseMapper();
        TestDemoWxEntity testDemoWxEntity = new TestDemoWxEntity();
        testDemoWxEntity.setToken(signature);

//        return R.ok(testDemoWxEntity);
        ArrayList<String> array = new ArrayList<String>();
        array.add(signature);
        array.add(timestamp);
        array.add(nonce);
        testDemoWxEntity.setJson(JSONUtil.toJsonStr(array));
        baseMapper.insert(testDemoWxEntity);
        //排序
        String sortString = sort("777888999", timestamp, nonce);
        //加密
        String mytoken = Decript.SHA1(sortString);
        //校验签名
        if (!mytoken.isEmpty() && mytoken.equals(signature)) {
            System.out.println("签名校验通过。");
            return echostr;
            //如果检验成功输出echostr，微信服务器接收到此输出，才会确认检验完成。
        } else {
            System.out.println("签名校验失败。");
            return null;
        }
    }
    /**
     * 排序方法
     * @param token
     * @param timestamp
     * @param nonce
     * @return
     */
    public static String sort(String token, String timestamp, String nonce) {
        String[] strArray = { token, timestamp, nonce };
        Arrays.sort(strArray);

        StringBuilder sbuilder = new StringBuilder();
        for (String str : strArray) {
            sbuilder.append(str);
        }

        return sbuilder.toString();
    }

}
